package com.chen.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet(
        value = "/t2", initParams = {
        @WebInitParam(name = "keyc", value = "valuec", description = "第一个初始化配置参数"),
        @WebInitParam(name = "keyd", value = "valued", description = "第二个初始化配置参数")
}
)
public class TestServletConfig2 extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("-----------------ServletConfig-------------------------");
        // 每一个ServletConfig只服务当前的servlet （在tomcat中是多列的）
        // 方法是从父级的父级（GenericServlet） 中继承下来的
        // 作用 ： 获取ServletConfig对象 , 这个ServletConfig对象中存储着当前servlet初始配置参数
        ServletConfig servletConfig = getServletConfig();
        // Enumeration 是一个迭代器
        Enumeration<String> parameterNames = servletConfig.getInitParameterNames();
        // Enumeration 中 hasMoreElements 方法作用：是否有下一个值
        while (parameterNames.hasMoreElements()) {
            // nextElement 方法作用：获取下一个值 并且往前移动一次指针
            String pname = parameterNames.nextElement();
            // getInitParameter根据对应的初始配置参数的key来获取对应的配置值
            String configInitParameter = servletConfig.getInitParameter(pname);
            System.out.println(configInitParameter);
        }


        // ServletContext 是所有servlet公有的 （同时也表示servlet在tomcat中单例的）
        System.out.println("-----------------ServletContext------------------------");
        // 获取ServletContext对象的三种是方式
        ServletContext servletContext = req.getServletContext();
        ServletContext servletContext1 = servletConfig.getServletContext();
        ServletContext servletContext2 = super.getServletContext();

        System.out.println(servletContext == servletContext1);
        System.out.println(servletContext == servletContext2);

        // 根据配置的name获取value值
        // 单个
        String age = servletContext.getInitParameter("age");
        System.out.println(age);

        // 全部
        Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
        while (initParameterNames.hasMoreElements()) {
            String key = initParameterNames.nextElement();
            System.out.println(key + " = " + servletContext.getInitParameter(key));
        }


    }
}
